Linux 从txt文件unix中选取错误的列值
我不熟悉脚本,我有以下问题: 1.在得到文本文件中的“file:”值后,它应该跳过2行,然后从第2行读取 (-如果我在txt文件中找到“File:”,我想跳过2行。这可能会出现1次以上) i/p文件为:Linux 从txt文件unix中选取错误的列值,linux,bash,shell,unix,sh,Linux,Bash,Shell,Unix,Sh,我不熟悉脚本,我有以下问题: 1.在得到文本文件中的“file:”值后,它应该跳过2行,然后从第2行读取 (-如果我在txt文件中找到“File:”,我想跳过2行。这可能会出现1次以上) i/p文件为: file : noki lab:3232 date : 12/3/16 field length position text name 16 0 1 account name info 1 10 Bank account info city
file : noki lab:3232 date : 12/3/16
field length position text
name 16 0 1 account name
info 1 10 Bank account info
city 3 0 13 bank acc city name
state 4 17 acc state
--在这里,我想跳过我在txt文件中找到的两行“File:”。这可能会发生一次以上
name 0
info 10
city 0
state 17
这是错误的,我需要输出:
name 1
info 10
city 13
state 17
awk
救援
$ awk '/^file :/ {c=2}
!(c&&c--) {print $1, $(NF-1)}' file
name 1
info 10
city 13
state 17
解释
当模式匹配时,将计数器设置为2,跳过指定的行数,并从其余部分打印第一个和倒数第二个字段
更新
如果最后一列包含空格,则最简单的(gawk
仅限)
否则,请花时间修复输入文件的格式。去掉字段之间多余的
0
,将字段分隔符改为tab等。awk
来拯救
$ awk '/^file :/ {c=2}
!(c&&c--) {print $1, $(NF-1)}' file
name 1
info 10
city 13
state 17
解释
当模式匹配时,将计数器设置为2,跳过指定的行数,并从其余部分打印第一个和倒数第二个字段
更新
如果最后一列包含空格,则最简单的(gawk
仅限)
否则,请花时间修复输入文件的格式。去掉字段之间多余的
0
,将字段分隔符改为tab等。看起来不错。我正在考虑寻找一个shell工具,它可以让我从末尾开始索引,但想不出一个简单的方法来完成它。awk显然很棒,但无法扩展。再说一次,对于这样的事情,它是非常强大的:)谢谢!忘记了这个方便的工具自然存在。非常感谢,它看起来不错,但当文本文件包含以下数据时,它会失败,然后它会选择错误的数据,因为它之间有空格:数据如:Rec ID或bank acc noLooks good。我正在考虑寻找一个shell工具,它可以让我从末尾开始索引,但想不出一个简单的方法来完成它。awk显然很棒,但无法扩展。再说一次,对于这样的事情,它是非常强大的:)谢谢!忘记了这个方便的工具自然存在。非常感谢,它看起来不错,但当文本文件包含以下数据时,它会失败,然后它会选择错误的数据,因为它之间有空格:数据如:Rec ID或bank acc no