让awk在for循环中正常工作

时间:2015-01-26 03:14:11

标签: bash

我正在尝试从22个不同的文件中提取第二列。在处理单个文件时,我得到了正确的输出,但在循环中,在每个文件中,它将多个不同文件的2列串联在一起。任何人都可以帮助我。

for i in f*
do
    awk '{print $2}' f* > a_$i
done    

2 个答案:

答案 0 :(得分:2)

更改您的命令,

for i in f*
do
    awk '{print $2}' "$i" > "a_$i"
done

一衬垫,

for i in f*; do awk '{print $2}' "$i" > "a_$i"; done

您需要将awk命令中的f*替换为存储当前文件名的$i

答案 1 :(得分:1)

这样做你想要的:

awk '{print $2 >"a_"FILENAME}' f*

对于以字母f开头的每个文件,这会将其第二列写入以a_开头的新文件。

输出文件与输入的行数相同,但输出只有第二列。

请注意,上述方法有效,因为>awk中的含义与在shell中有所不同。

实施例

假设我们有一系列文件,如:

$ cat f1
One 1
One 11

现在,让我们运行awk命令:

$ awk '{print $2 >"a_"FILENAME}' f*

完成此操作后,目录中会有一系列a_*个文件,例如:

$ cat a_f1
1
11