让 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
我正在尝试从 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