【问题标题】:How to include tsv/csv header in bash script output如何在 bash 脚本输出中包含 tsv/csv 标头
【发布时间】:2015-12-04 11:23:13
【问题描述】:

我有数千个 .tsv 文件,我在其中提取第 2 列等于第 6 列的行。

我可以使用下面的 bash 脚本,但我无法在输出中附加列名(标题)。

包含header的方法是什么?

for x in *.tsv; do
   awk '$2==$6' <"$x" >"$x.tmp"
   mv "$x.tmp" "$x"
done

【问题讨论】:

    标签: bash csv unix awk sed


    【解决方案1】:

    如果要根据两个条件进行打印,请这样说:

    awk 'FNR==1 || $2==$6' file
    

    这将打印符合以下任一条件的行:

    • 匹配$2==$6 条件。
    • 是第一行。

    另外,注意你不需要用 bash 循环,awk 可以做到:

    awk '(FNR==1 || $2==$6) {print > FILENAME".bk"}' *.tsv
    

    【讨论】:

    • 漂亮!正是我需要的。谢谢
    • 另外,你如何反转这个相等条件?我的意思是,提取不相等的行。
    • @MAPK 你可以说$2 != $6
    • 谢谢!我是 awk/bash 的新手。听起来与大多数正则表达式和条件的 perl/python 或 R 相似。
    • @MAPK 太好了。有趣的阅​​读:Idiomatic awk
    猜你喜欢
    • 2018-02-24
    • 2020-12-26
    • 2011-09-04
    • 2013-07-21
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多