テーブルファイルがあります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