我在文件中有两行:
MUMBAI,918889986665,POSTPAID,CRBT123,CRBT,SYSTEM,151004,MONTHLY,160201,160302
MUMBAI,912398456781,POSTPAID,SEGP,SEGP30,SMS,151004,MONTHLY,160201,160302
我想在上面的线上切割第2和第4场。条件是:从字段2开始,我只需要十位数字。
期望的输出:
8889986665,CRBT
2398456781,SEGP30
我正在尝试下面的命令:
cut -d',' -f2 test.txt | cut -c3-12 && cut -d',' -f4 test.txt
我的输出:
8889986665
2398456781
CRBT
SEGP30
请帮助我达到理想的输出。
答案 0 :(得分:3)
解决方案2: 以下是能够达到目的的解决方案:
cut -d',' -f2,4 1 | sed 's/.*\([0-9]\{10\}\),\(.*\)/\1,\2/'
8889986665,CRBT123
2398456781,SEGP
cut
会给我们第二个和第四个字段。 .*
跳过初始字符,直到遇到第一个模式。 \([0-9]\{10\}\),
\(.*\)
\1,\2
请注意,数字10
可以替换为字符数
在分隔符,
[0-9]
之前提取的内容可以由.
if替换
这些字符可以是任何类型的字符。
解决方案1:
在这种情况下,使用cut
对您来说最简单。
首先需要从行中过滤出所需的字段(2,4),然后进行更多过滤(字段#2中只有10个字符)
$ cut -d',' -f2,4 test.txt | cut -c3-
8889986665,CRBT123
2398456781,SEGP
答案 1 :(得分:1)
这是使用awk
完成的最佳工作:
awk -F, -v n=10 '{print substr($2, length($2)-n+1, n) FS $5}' file
8889986665,CRBT
2398456781,SEGP30
substr
命令将在第二列中打印最后n
个字符。
答案 2 :(得分:0)
cat test.txt | cut -f 2,4 -d ","
假设您的文件是test.txt
答案 3 :(得分:0)
sed -r 's/[^,]+,..([^,]+,)([^,]+,)([^,]+),.*/\1\3/' file
8889986665,CRBT123
2398456781,SEGP