linux - 获取一个字段的最后 n 个字符并在 Linux 中完成字符串的第二个字段

标签 linux shell awk cut

我在一个文件中有两行:

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 

请帮助我实现预期的输出。

最佳答案

解决方案 2: 这是将达到目的的解决方案:

剪切 -d',' -f2,4 1 | sed 's/.*\([0-9]\{10\}\),\(.*\)/\1,\2/'

8889986665,彩铃123

2398456781,SEGP

  • cut 将为我们提供第二个和第四个字段。
  • 在 sed 内部,.* 跳过初始字符,直到遇到前面的第一个模式。
  • 第一个模式是 10 位数字后跟一个分号: \([0-9]\{10\}\),
  • 第二个模式是该行的其余部分:\(.*\)
  • 现在我们打印两个模式,中间有分号:\1,\2

请注意,数字 10 可以替换为要显示的字符数 在分隔符,之前提取[0-9]可以用.代替,如果 这些字符可以是任何类型的字符。

解决方案一:

在这种情况下,使用 cut 对您来说是最简单的。

您首先需要从行中过滤出所需的字段 (2,4),然后进行更多过滤(字段 #2 中只有 10 个字符)

$ cut -d',' -f2,4 test.txt | cut -c3-        
8889986665,CRBT123
2398456781,SEGP

关于linux - 获取一个字段的最后 n 个字符并在 Linux 中完成字符串的第二个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35764769/

相关文章:

c - fgets 和 chdir 在 C 中一起表现得很奇怪

linux - 扇区大小不是 4096 的 xfs 文件系统导致英特尔 NVMe 驱动器性能下降

php - 使用 ssh 和 shell 从另一个 php 脚本在 Linux 服务器中运行 php 脚本

linux - 调用bash脚本在if语句和变量赋值上生成错误

bash - 找到一个模式,然后仅在该模式之后执行换行

linux - -bash : syntax error near unexpected token `done' in script

bash - 如何在 bash 中仅替换单个换行符?

linux - 根据标题类别将行转换为属于不同类别的相应列

Linux NASM 检测 EOF

linux - 在哪里可以获得 "setfacl"Linux/Unix 命令的源代码