我有一个包含 ID 行的文件,我正在从每行中提取某些子字符串。我见过这答案,这很好,但我不知道如何让它在每一行上执行。我认为xargs
应该是其中的一部分,但我不确定。
举个例子,我有这个:
123400011234
973700021234
2839900031235
827900041234
(为了清晰起见,加粗)
我想要对于每个上面的行提取此内容:
0001
0002
0003
0004
现在我知道如果一行中的$line_one
,我可以用来echo ${line_one: -8:4}
抓取最后 8 个字符中的前 4 个字符。但我有来自上一个命令的行(类似于cut -d "|" f1
,(我认为,我不在有相关文件的电脑上,并且该电脑没有互联网))。我想象的是一个我可以运行这个的世界:
cut -d "|" -f1 | xargs echo ${xargs_line: -8:4}
为了得到我的输出......
这可能吗?如果是这样怎么办?
答案1
您只需执行以下操作即可完成整个操作awk
:
$ awk -F'|' '{print substr($1,length($1)-7, 4)}' f1
例子
样本数据文件f1
:
$ cat f1
123400011234|blah|blah
973700021234|blah|blah
2839900031235|blah|blah
827900041234|blah|blah
运行该命令会产生以下结果:
$ awk -F'|' '{print substr($1,length($1)-7, 4)}' f1
0001
0002
0003
0004
答案2
cut -d "|" -f1 | while read line; do echo ${line: -8:4}; done