【问题标题】:Delete lines with particular number of columns in linux [duplicate]在linux中删除具有特定列数的行[重复]
【发布时间】:2021-12-16 11:00:51
【问题描述】:

我的 file.fam 看起来像下面包含大约 22k 行。我想删除包含少于 6 列的行。

06S14031708 36125 0 0 2 2
06S14031716 38824 0 0 1 2
06S14031729 27949 0 0 2 2
06S14031742 30585 0 0 2 2
5 5 0 0 1 1
6 6 0 0 1 
12 12 0 0 1 2
16 16 0 0 1 2
18_0004 21213 0 0 1 1
18_0006 35931 0 0 1 1
18_0008 31975 0 0 1 1

【问题讨论】:

  • 您要删除1 2 3 4 6(两个空格,一个空列)吗?当你想保留这个时,一个简单的awk 解决方案将失败。
  • @WalterA:我不同意这一点。在我看来,Andrej 的建议也适用。
  • @Cyrus:我的意思是,当您将单个空格视为分隔符时,我的示例有 6 列。第五列存在且为空。 echo "1 2 3 4 6" | awk 'NF >= 6' 不打印 6 列的输入行。

标签: bash unix


【解决方案1】:

awk 版本将所有超过 5 个“单词”的行重定向到新文件:

awk 'NF>=6' file.fam > file.fam.new
mv file.fam.new file.fam

或者使用带有内联替换的sed 的更难看的变体:

sed -i -r '/^\s*(\w+\s+){5}\w+\s*$/!d' file.fam

【讨论】:

    猜你喜欢
    • 2013-01-03
    • 2020-07-08
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多