如何加载文件并将所有结果放在 bash 中的单独文件中?
How to load files and all result put in separate files in bash?
我有几个 *.afa 格式的文件。我需要删除它们之间的间隙,我有一个工具可以做到这一点。
这是一个事实。
fac 中的命令是:
fac -g inputFile.afa outputFile.afa
而且它运行良好。但是现在我需要自动处理100xx的文件,我想编写脚本。但结果是,我需要有一个未更改的输入文件,并导致文件 R 在文件名中排在第一位。
例如:
Before:
1.afa 30kb
2.afa 30kb
3.afa 40kb
After:
1.afa 30kb
R1.afa 15kb
2.afa 30kb
R2.afa 15kb
3.afa 40kb
R3.afa 20kb
Bash对我来说很陌生。我知道我应该学习它,我会的,但我需要快速得到结果。
现在我只写这个:
#!/bin/bash
ls *.afa | parallel "fac -g {} >{R.}.afa"
但是:
1. 我不能写一个正确的正则表达式来在第一个字母的 R 中的新文件中打印结果
2. 只有最后一个结果保存在一个文件中。那不会为每个文件生成结果。
有人可以帮助我吗?
您应该能够在 bash shell 中的一行中执行此操作,假设您位于所有 .afa
文件所在的文件夹中:
l=($(ls *.afa)); for f in ${l[@]}; do fac -g $f "R$f"; done
# Should also work without "" around R$f.
正如@codeforester 指出的那样,这样更好(更安全):
for f in *.afa; do fac -g $f "R$f"; done
这可以扩展为:
l=(*.afa) # bash array for all .afa files.
for f in ${l[@]}; do # loop over array
fac -g $f R$f; # Run original command for each $f
done
您不能为 parallel
编写正确的正则表达式的原因是没有涉及正则表达式。 {}
简单地替换为引用的名称。如果你想在前面加上 R
它只是 R{}
:
#!/bin/bash
parallel "fac -g {} R{}" ::: *.afa
由于来自 ls
的管道被认为不是好的做法,因此此示例改用 glob 扩展。
我有几个 *.afa 格式的文件。我需要删除它们之间的间隙,我有一个工具可以做到这一点。 这是一个事实。 fac 中的命令是:
fac -g inputFile.afa outputFile.afa
而且它运行良好。但是现在我需要自动处理100xx的文件,我想编写脚本。但结果是,我需要有一个未更改的输入文件,并导致文件 R 在文件名中排在第一位。 例如:
Before:
1.afa 30kb
2.afa 30kb
3.afa 40kb
After:
1.afa 30kb
R1.afa 15kb
2.afa 30kb
R2.afa 15kb
3.afa 40kb
R3.afa 20kb
Bash对我来说很陌生。我知道我应该学习它,我会的,但我需要快速得到结果。 现在我只写这个:
#!/bin/bash
ls *.afa | parallel "fac -g {} >{R.}.afa"
但是: 1. 我不能写一个正确的正则表达式来在第一个字母的 R 中的新文件中打印结果 2. 只有最后一个结果保存在一个文件中。那不会为每个文件生成结果。
有人可以帮助我吗?
您应该能够在 bash shell 中的一行中执行此操作,假设您位于所有 .afa
文件所在的文件夹中:
l=($(ls *.afa)); for f in ${l[@]}; do fac -g $f "R$f"; done
# Should also work without "" around R$f.
正如@codeforester 指出的那样,这样更好(更安全):
for f in *.afa; do fac -g $f "R$f"; done
这可以扩展为:
l=(*.afa) # bash array for all .afa files.
for f in ${l[@]}; do # loop over array
fac -g $f R$f; # Run original command for each $f
done
您不能为 parallel
编写正确的正则表达式的原因是没有涉及正则表达式。 {}
简单地替换为引用的名称。如果你想在前面加上 R
它只是 R{}
:
#!/bin/bash
parallel "fac -g {} R{}" ::: *.afa
由于来自 ls
的管道被认为不是好的做法,因此此示例改用 glob 扩展。