Awk 如何用文件B中相同位置的行替换文件A中的每一新行
我有两个文件(文件A和文件B),它们包含相同数量的内容行 文件A:Awk 如何用文件B中相同位置的行替换文件A中的每一新行,awk,sed,text-processing,Awk,Sed,Text Processing,我有两个文件(文件A和文件B),它们包含相同数量的内容行 文件A: a_line_x a_line_y a_line_z a_line_t 文件B: b_line_x b_line_y ------------- b_line_z ---##---##--- b_line_t 我想将fileA中的换行替换为fileB中出现在相同位置的行(在示例虚线中),以便: a_line_x a_line_y ------------- a_line_z ---##---##--- a_line_t
a_line_x
a_line_y
a_line_z
a_line_t
文件B:
b_line_x
b_line_y
-------------
b_line_z
---##---##---
b_line_t
我想将fileA中的换行替换为fileB中出现在相同位置的行(在示例虚线中),以便:
a_line_x
a_line_y
-------------
a_line_z
---##---##---
a_line_t
可以用sed或awk这样的linux命令来实现吗 编辑:要处理文件中的控制M字符并在处理之前将其删除,请尝试以下操作
awk '
{
gsub(/\r/,"")
}
FNR==NR{
if($0!~/[a-zA-Z]+/){
a[++count]=$0
}
next
}
/^$/{
print a[++i]
i=i==2?0:i
next
}
1
' fileB fileA
awk '
FNR==NR{
if($0!~/[a-zA-Z]+/){
a[++count]=$0
}
next
}
/^$/{
print a[++i]
i=i==2?0:i
next
}
1
' fileB fileA
你能试试下面的吗
awk '
{
gsub(/\r/,"")
}
FNR==NR{
if($0!~/[a-zA-Z]+/){
a[++count]=$0
}
next
}
/^$/{
print a[++i]
i=i==2?0:i
next
}
1
' fileB fileA
awk '
FNR==NR{
if($0!~/[a-zA-Z]+/){
a[++count]=$0
}
next
}
/^$/{
print a[++i]
i=i==2?0:i
next
}
1
' fileB fileA
短
awk
方法基于:
你好,谢谢你的回复。不幸的是,它没有做到我想要的。作为输出,我得到了一个与file相同的文件A@zwlayer,这对我很有效。从故障排除的角度来看,您是否可以通过运行命令
cat-v fileA
和cat-v fileB
检查两个文件中是否有控制M字符,如果您找到了它们,请执行tr-d'\r'temp&&mv temp fileA
删除它们,让我知道它是如何运行的?我已经尝试过了,但我得到了这个错误:tr:extra操作数'fileA'请尝试'tr--help'以了解更多信息。@zwlayertr-d'\r'temp&&mv temp fileA
通过运行这个确切的命令,您的意思是什么?很抱歉,错误现在已经消失了,但我仍然得到与文件A相同的文件output@zwlayer,不难理解,file1
是fileA
,file2
是fileB
(人类逻辑)