让 awk 在 for 循环中正常工作

Getting awk working properly in a for loop

我正在尝试从 22 个不同的文件中提取第二列。在处理单个文件时,我得到了正确的输出,但是在循环中,在每个文件中,它将几个不同文件的 2 列串联在一个文件中。谁能帮帮我。

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

像这样更改命令,

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

单行,

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

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

这就是你想要的:

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

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

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

请注意,以上内容有效,因为 >awk 中的含义与在 shell 中的含义有些不同。

例子

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

$ cat f1
One 1
One 11

现在,运行 awk 命令:

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

完成后,目录下会出现一系列a_*个文件,如:

$ cat a_f1
1
11