我正在尝试从22个不同的文件中提取第二列。在处理单个文件时,我得到了正确的输出,但在循环中,在每个文件中,它将多个不同文件的2列串联在一起。任何人都可以帮助我。
for i in f*
do
awk '{print $2}' f* > a_$i
done
答案 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