Linux 是否有一种方法可以从文本文件中删除斜杠后的数据,如下图所示?
我正在尝试使用sed和awk从文本文件中删除电话号码,直到下一个逗号,但没有任何运气 这个Linux 是否有一种方法可以从文本文件中删除斜杠后的数据,如下图所示?,linux,bash,unix,awk,sed,Linux,Bash,Unix,Awk,Sed,我正在尝试使用sed和awk从文本文件中删除电话号码,直到下一个逗号,但没有任何运气 这个 2020-04-13 17:09:58.934,/abc/blahblahblahI/v1/dennisritchie/7408058445,2020-04-13 17:09:58.687,2020-04-13 17:09:58.934 2020-04-13 17:09:59.387,/cde/bunnyrabbit/v1/tea/generate/9161455644,2020-04-13 17:09:
2020-04-13 17:09:58.934,/abc/blahblahblahI/v1/dennisritchie/7408058445,2020-04-13 17:09:58.687,2020-04-13 17:09:58.934
2020-04-13 17:09:59.387,/cde/bunnyrabbit/v1/tea/generate/9161455644,2020-04-13 17:09:59.322,2020-04-13 17:09:59.387
2020-04-13 17:09:59.567,/fgh/scoobybites/v1/shaggy/markup/7672748033,2020-04-13 17:09:59.459,2020-04-13 17:09:59.567
2020-04-13 17:09:59.640,/xxx/xxxxxxxxxxxxxx/v1/xxx/generate,2020-04-13 17:09:59.624,2020-04-13 17:09:59.640
2020-04-13 17:09:59.796,/yyyy/defoe/v1/aaaaaaaaaal/9820276621?noOfRecords=1&blahlahAccountNo,2020-04-13 17:09:59.523,2020-04-13 17:09:59.796
需要像这样
2020-04-13 17:09:58.934,/abc/blahblahblahI/v1/dennisritchie/,2020-04-13 17:09:58.687,2020-04-13 17:09:58.934
2020-04-13 17:09:59.387,/cde/bunnyrabbit/v1/tea/generate/,2020-04-13 17:09:59.322,2020-04-13 17:09:59.387
2020-04-13 17:09:59.567,/fgh/scoobybites/v1/shaggy/markup/,2020-04-13 17:09:59.459,2020-04-13 17:09:59.567
2020-04-13 17:09:59.640,/xxx/xxxxxxxxxxxxxx/v1/xxx/generate,2020-04-13 17:09:59.624,2020-04-13 17:09:59.640
2020-04-13 17:09:59.796,/yyyy/defoe/v1/aaaaaaaaaal/,2020-04-13 17:09:59.523,2020-04-13 17:09:59.796
请注意,我需要从电话号码到下一个逗号的数据,就像最后一行一样
任何帮助都将不胜感激
感谢您提供的解决方案,除了下面所示的解决方案之外,它们在所有线路上都有效。您能帮忙吗 /dcd/manual/v2/profile/9841001122?字段=计费安排,计费账号,faId,2020-04-16 09:59:59.7402020-04-16 09:59:59.825 运行命令后,它将给出以下输出 /dcd/manual/v2/profile,账单账号,faId,2020-04-16 09:59:59.7402020-04-16 09:59:59.825 但是预期的输出如下所示,请您帮助。我卡住了 /dcd/manual/v2/profile,2020-04-16 09:59:59.7402020-04-16 09:59:59.825可能是这样
cat data.txt \
| sed -r 's/(.*)\/[[:digit:]]+,(.*)/\1,\2/g' \
| sed -r 's/(.*)\/[[:digit:]]+\?[^,]*,(.*)/\1,\2/g'
第二个替换是因为我注意到示例中的最后一行与其他行不同
如果您的完整数据集中有其他特殊情况,您需要以类似的方式处理它们您可以在一行中这样做,如下所示
awk 'BEGIN{FS=OFS=","} {sub(/[0-9]{10}.*/,"",$2)} 1' Input_file
编辑:根据@kvantour注释处理角落案例尝试以下操作
awk '
{
val=""
num=split($2,array,"/")
sub(/[0-9]{10}.*,/,",",array[num])
for(i=1;i<=num;i++){
val=(val?val"/":"")array[i]
}
$2=val
}
1
' Input_file
awk'
{
val=“”
num=split($2,数组“/”)
sub(/[0-9]{10}.*,/,“,”,数组[num])
对于(i=1;我很高兴你提到你尝试了很少的东西。因此,我们鼓励用户增加他们的努力(正确或错误并不重要,因为我们都在这里学习),请编辑您的帖子并在其中添加示例,然后让我们知道。哦,我的天啊,它成功了!!我已经为此奋斗了两天。您是个天才。非常感谢!您可以将命令简化为sed-E的|/[0-9]+[^,]*,|/,|'
或sed-E的|/[0-9]{10}[^,]*,|/,|
(条件更严格)感谢您提供的解决方案,它们适用于除下面所示之外的所有行。您可以帮助/dcd/manual/v2/profile/9841001122吗?fields=billingArrangement,billingAccountNo,faId,2020-04-16 09:59:59.7402020-04-16 09:59:59.825运行命令后,它给出的输出是/dcd/manual/v2/profile,billingAccountNo,faId,2020-04-16 09:59:59.7402020-04-16 09:59:59.825但是预期的输出如下,你能帮忙吗。我被卡住了/dcd/manual/v2/profile,2020-04-16 09:59:59.7402020-04-16 09:59:59.825好吧,这有点难,因为COMA正在拧csv结构,但这是可能的。给我一点时间。顺便问一下,这是整条线吗没有日期作为第一部分?请尝试此cat data.txt | sed-r的/(.*)\/[:digit:]+.*([^,]+),([^,]+)/\ 1,2,3 /g′/代码>,但您需要学习正则表达式,因为您将经常遇到这些问题。这一个将处理所有的情况BTW。这也是有效的,谢谢您的快速切换!这是不安全的,它可能删除目录结构中间的数字。<代码>开始F{OFS=“,”}{Sub(/[[] /[*$],“/”,2美元)}。1'
@kvantour,当然谢谢你,现在尝试在编辑代码中修复它。你好,Ravinder,你的解决方案适用于所有行,除了下面的行/dcd/manual/v2/profile/9841001122?fields=billingArrangement,billingAccountNo,faId,2020-04-16 09:59:59.7402020-04-16 09:59:59:59.825运行它给出的命令后是下面的输出t/dcd/manual/v2/profile,billingAccountNo,faId,2020-04-16 09:59:59.7402020-04-16 09:59:59.825但预期输出如下,请您帮助。我被卡住了/dcd/manual/v2/profile,2020-04-16 09:59:59.7402020-04-16 09:59:59.825