如果要像下面这样从一行中的定界文件(定界符“ ||”)中提取2列,可以很容易地完成
foo||bar||baz||quux
通过
cut -d'||' -f1 file_name
但在我的情况下,单行记录的文件记录转到下一行,例如:
foo||bar||baz||quux||foo||bar||baz||quux||foo||bar||baz||quux
||quux||bar||baz||quux||foo||bar||baz||quux||foo||bar||baz||quux
它从上述命令的输出是
foo
quux
相反,它应该只是“ foo”,因为它在第一列中。
文件包含在第1行
foo||bar||baz||quux||foo||bar||baz||quux||foo||bar||baz||quux
||quux||bar||baz||quux||foo||bar||baz||quux||foo||bar||baz||quux
文件包含在第2行
foo2||bar2||baz2||quux2||foo2||bar2||baz2||quux2||foo2||bar2||baz2||quux2
||quux2||bar2||baz2||quux2||foo2||bar2||baz2||quux2||foo2||bar2||baz2||quux2
输出应该是
foo
foo2
最佳答案
几乎,但是-d
开关仅占用一个字符:
cut -d'|' -f1 file_name
输出:
foo
foo2
注意:由于定界符加倍,因此如果字段号大于1,
-f
开关将无法按预期工作。一种处理方法是将字段调整为等于“ 2n-1”。因此,要获取字段3,请执行-f$(( (3*2) - 1 ))
。