我有一篇这样的文字:
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)