我有一个带有约10,000行数据的大文本文件,因此每行可能有不同数量的列。例如:
789 KKPP 2018 08 09 10 20 30 AUTO A2987 10SM 5-MIN 22/13
790 KGOX 2018 08 09 10 20 35 AUTO P0002 21/19
...
798 KLXZ 2018 08 09 10 20 40 AUTO 18013GT 7SM 21/16 RMK A02 T02060156
799 KMNO 2018 08 09 10 20 45 AUTO 10SM P0001
...
...
Run Code Online (Sandbox Code Playgroud)
我想遍历每一行并提取出现前缀“ P00 *”的第二列。例如,在文件的以上代码段中,我想要:
KGOX P0002
KMNO P0001
Run Code Online (Sandbox Code Playgroud)
对应于线790和799。列数是完全随机的,并且可以从一行更改为另一行。最重要的是,在该行的某处,某些文本列以“ P00”开头。
我有一个简单的while读取循环:
while IFS='' read -r line || [[ -n "${line}" ]];
do
temp=$(echo ${line} | awk '{print $7}')
if [[ ${temp:0:3} == "P00" ]];
then
data=${temp}
fi
done
Run Code Online (Sandbox Code Playgroud)
但这很快就会变得混乱,因为列数可能超过30。是否有一种更简单的方法来获取此信息,并可能将其写入文本文件?我知道awk可以做一些可能有用的事情,但却无法使任何事情正常工作。
使用GNU sed:
sed -En 's/^[^ ]+ ([^ ]+).*( P00[^ ]*).*/\1\2/p' file
Run Code Online (Sandbox Code Playgroud)
输出:
KGOX P0002 KMNO P0001
| 归档时间: |
|
| 查看次数: |
120 次 |
| 最近记录: |