Unix 从每列中删除第一个和最后一个连字符

Unix 从每列中删除第一个和最后一个连字符,unix,awk,sed,Unix,Awk,Sed,在将第一个和最后一个字符保存到文件之前,我试图从两个单独的列中删除它们。我需要删除的字符是连字符。由于结果中有连字符,我无法将其全部删除。有没有更有效的方法来使用awk 我目前的想法与这个命令类似 cat file.txt | awk -F '|' '{print $2, $4}' | sed 's/.//;s/.$//' > newfile.txt 文件示例 1-|-40939-23-|-column-3-|-column-4-| 2-|-9832651-23-|-column-3-|

在将第一个和最后一个字符保存到文件之前,我试图从两个单独的列中删除它们。我需要删除的字符是连字符。由于结果中有连字符,我无法将其全部删除。有没有更有效的方法来使用awk

我目前的想法与这个命令类似

cat file.txt | awk -F '|' '{print $2, $4}' | sed 's/.//;s/.$//' > newfile.txt
文件示例

1-|-40939-23-|-column-3-|-column-4-|
2-|-9832651-23-|-column-3-|-column-4-|
电流输出

40939-23- -column-4  
9832651-23- -column-4
期望输出

40939-23 column-4 
9832651-23 column-4

请您尝试以下内容,并让我知道这是否有帮助

awk -F"|" '{gsub(/^-|-$/,"",$2);gsub(/^-|-$/,"",$(NF-1));print $2,$(NF-1)}' Input_file
解决方案2:考虑到您的输入文件始终相同,使用字段编号

awk 'BEGIN{FS="[-|]";OFS="-"}{print $4 OFS $5 " " $12 OFS $13}' Input_file

请尝试
awk-F'|''''{gsub(/^-|-$/,,$2);gsub(/^-|-$/,,,,$4);print$2“$4;}”newfile.txt>tmp&&mv tmp newfile.txt
谢谢Wiktor,这个解决方案非常有效。感谢RavinderSingh,我想我可以看到你在这段代码中所做的事情,但我可以让其中任何一个为我工作。太棒了,我没有意识到命令可以简化成这样,非常完美。谢谢Ed Morton。同样
-F'-\\\\\\\-?'
wrt
\\\\\\\\\\\\\\\\\\\\\\/code>vs
[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/code>-每当你需要两个反斜杠时,我更喜欢使用括号表达式,因为它的字符数相同,但更清晰一些。WRT <代码> -< /COD> VS <代码>(-$$)< /代码> - OP显示在行的末尾可以有<代码> ->代码>,在该上下文中,它必须被当作分隔符,但是他没有说“代码> -< < /C> >是否可以出现在一行中,并且,如果是这样的话,在这种情况下,它是否应该被视为分隔符,那么我更喜欢后者,因为我知道它将按照预期的方式运行。
$ awk -F'-[|](-|$)' '{print $2, $4}' file
40939-23 column-4
9832651-23 column-4