テーブルファイルの特定の列でsedを使用する方法

テーブルファイルの特定の列でsedを使用する方法

テーブルファイルがありますA.tsv(区切り記号= \t)。

20655|dkljdjj   66  lala
20644|kmkmoii   75  lolo
20477|kmlkooo   88  lili

|最初の列から(パイプに含まれる)|以降のすべての内容を削除したいと思います。

20655   66  lala
20644   75  lolo
20477   88  lili

sedを使用してこれを行う方法を知っていますが、sed 's/|.*//' A.tsv > B.tsv最初の列だけでなくパイプの後ろのすべての項目も削除します。

では、何をすべきか知っていますか?おそらくawkと組み合わせたのでしょうか?ありがとう

答え1

.(すべての文字)を[^\t](タブ以外のすべての文字)または[^[:blank:]](水平スペースを除くすべての文字)に置き換えることができます。

sed 's/|[^\t]*//' A.tsv > B.tsv

sed 's/|[^[:blank:]]*//' A.tsv > B.tsv

awkを好む場合:

awk '{sub(/\|.*/,"",$1)} 1' OFS='\t' A.tsv

答え2

グループ化を使用することもできます。sed

sed -E 's/(\S+)\|\S+\s(.*$)/\1\2/' inputfile

出力

20655  66  lala
20644  75  lolo
20477  88  lili

関連情報