将grep结果传送到awk

将grep结果传送到awk,awk,sed,grep,Awk,Sed,Grep,我想从csv文件中删除列,其中包含一些作为列标题的文本 我希望输出文件与grep找到的文件名相同 我做了以下几件事 grep -l "pattern" * | xargs -0 awk -F'\t' '{print $1"\t"$2}' > output_file 如何将结果输出到grep找到的同一个文件中 谢谢。只需执行以下操作: grep -l "pattern" * | xargs awk -F'\t' '{print $1"\t"$2 > FILENAME}' FILEN

我想从csv文件中删除列,其中包含一些作为列标题的文本

我希望输出文件与grep找到的文件名相同

我做了以下几件事

grep -l "pattern" * | xargs -0 awk -F'\t' '{print $1"\t"$2}' > output_file
如何将结果输出到grep找到的同一个文件中

谢谢。

只需执行以下操作:

grep -l "pattern" * | xargs awk -F'\t' '{print $1"\t"$2 > FILENAME}'
FILENAME是输入文件的awk变量

例如:

$ cat file1
ABC zzz
EFG xxx
HIJ yyy
$ cat file2
123 aaa
456 bbb
789 ccc

grep -l "123" * | xargs awk '{print $2"\t"$1 > FILENAME}'
我切换包含“123”的文件中的第1列和第2列,并覆盖文件2

$ cat file1
ABC zzz
EFG xxx
HIJ yyy
$ cat file2
aaa    123
bbb    456
ccc    789

您可能想使用
grep-l…| xargs awk…
,但是
awk
没有覆盖它修改的文件的选项,好吧。我有一个脚本
ow
(用于“覆盖”),是我多年前从“UNIX编程环境”偷来的,可以使用。如果您有GNU
sed
,您可能可以使用它,因为它有一个覆盖选项(或者Mac OS X或BSD
sed
)。对于
sed
,打印两个制表符分隔的列(可能是很多列中的一列)并不太费力(尽管这也不是很简单)。