Unix系统如何将两个命令输出拼接为同一行追加写入文件
问题原因
你之前写的命令存在两个问题:
echo 'File_Checksum:' >> test.txt执行时会自动在字符串末尾加换行符,直接把前缀单独占一行写入文件- 管道符
|只会传递前序命令的标准输出,你这里前序echo的输出已经被>>重定向到文件了,根本不会传递给后面的md5sum命令,本质是两个独立的追加写操作,自然会分成两行。
可行实现方案
你可以选下面任意一种写法实现需求:
方案1:命令替换拼接(最直观)
直接在echo里通过命令替换拿到校验值,拼成一整行再写入:
echo "File_Checksum: $(md5sum test1.txt | cut -f 1 -d ' ')" >> test.txt
$(...)语法会先执行括号内的md5计算、截取校验值逻辑,把返回结果和前缀拼成完整的单行字符串后再追加到目标文件,不会出现换行问题。
方案2:awk直接拼接(效率更高)
不需要额外调用cut命令,直接用awk处理md5sum的输出拼接前缀:
md5sum test1.txt | awk '{print "File_Checksum: " $1}' >> test.txt
md5sum输出的第一列就是MD5校验值,awk直接拼接前缀后打印整行即可,写法更简洁。
方案3:无换行echo拼接(兼容写法)
如果要沿用先写前缀再写校验值的逻辑,给echo加-n参数取消自动追加末尾换行即可,记得最后补个换行保证文件格式正常:
echo -n "File_Checksum: " >> test.txt && md5sum test1.txt | cut -f 1 -d " " >> test.txt && echo "" >> test.txt
内容的提问来源于stack exchange,提问作者vicky20
相关产品推荐
相关产品推荐

