排除单行中两个单词之间的文本

排除单行中两个单词之间的文本

我有一篇这样的文字:


23660291|2019-12-23T23:13:24.380000|44.0108|11.3048|9.7|SURVEY-INGV||||ML|1.4|--|5 km E Barberino di Mugello (FI)

23610441|2019-12-17T03:40:08.660000|44.0317|11.2825|9.9|SURVEY-INGV||||ML|1.0|--|5 km NE Barberino di Mugello (FI)

23610371|2019-12-17T02:42:40.600000|44.0283|11.2798|9.8|SURVEY-INGV||||ML|1.4|--|4 km NE Barberino di Mugello (FI)

23609901|2019-12-17T00:19:33.840000|44.0362|11.2713|7.6|SURVEY-INGV||||ML|0.6|--|5 km NE Barberino di Mugello (FI)

23596801|2019-12-14T21:47:53.240000|44.0172|11.3043|9.3|SURVEY-INGV||||ML|1.8|--|5 km E Barberino di Mugello (FI)

继续,但布局是一样的

我需要排除文本以便只获取一些列,像这样的文本

2019-12-23T23:13:24.380000|SURVEY-INGV|1.4|--|5 km E Barberino di Mugello (FI)

我已经尝试了很多次,但我被困住了。有人可以帮助我吗?

答案1

如果这是确切的文本,那么这将起作用:

awk -F "|" 'BEGIN{OFS="|"} NR==1 {print $2,$6,$11,$12,$13}' file.txt

|第一部分将输入字段分隔符设置为带有 的管道awk -F "|"。然后,它会根据您在输出中的需要打印每个字段或列之间的字段分隔符BEGIN{OFS="|"}。然后它从第一行或记录中打印那些特定的列NR==1 {print $2,$6,$11,$12,$13}' file.txt

输出:

2019-12-23T23:13:24.380000|SURVEY-INGV|1.4|--|5 km E Barberino di Mugello (FI)

答案2

至少对于 GNU 来说cut,要么

cut -d '|' -f 2,6,11-13 text

或者

cut -d '|' --complement -f 1,3-5,7-10 text

应该管用。

答案3

sed "s/\|\{2,\}/|/g" filename| awk '$0 !~/^$/'|awk -F "|" 'OFS="|"{print $2,$6,$8,$9,$10}'

输出

2019-12-23T23:13:24.380000|SURVEY-INGV|1.4|--|5 km E Barberino di Mugello (FI)
2019-12-17T03:40:08.660000|SURVEY-INGV|1.0|--|5 km NE Barberino di Mugello (FI)
2019-12-17T02:42:40.600000|SURVEY-INGV|1.4|--|4 km NE Barberino di Mugello (FI)
2019-12-17T00:19:33.840000|SURVEY-INGV|0.6|--|5 km NE Barberino di Mugello (FI)
2019-12-14T21:47:53.240000|SURVEY-INGV|1.8|--|5 km E Barberino di Mugello (FI)

相关内容