我有这行 shell 代码:
ls -1 *.mp3| awk -v here="$(cygpath -w $PWD)" -v source="$source" '{print "File Name: "$0"\n"here"\n"source}'
Run Code Online (Sandbox Code Playgroud)
不幸的是它输出:
File Name: Data 00053.mp3
C:UsersathenaWorkProject_10.MBT
Source: Converted from RAW
Run Code Online (Sandbox Code Playgroud)
这条线C:UsersathenaWorkProject_10.MBT
应该是C:\Users\athena\Work\Project_10\00.MBT
我现在迷路了,有很多东西要在这里学习。
我不知道如何表述这个问题,因为大多数答案都是关于\r\n
从文件中删除的。
我有一个独特的问题,压缩文件是随机编号的,为了将它们与数据库记录正确关联,我需要列出文件内容并检查它们。
我正在使用此解决方案 “在 bash 脚本中,如何逐行捕获标准输出”
这是一个很好的开始。
某些内容的名称带有空格,我找到了这个解决方案: 如何将第三列打印到最后一列?
我在尝试更新数据库记录时发现,它^M
被插入到awk
管道的结果中,但仅限于NF
列。
不知道如何解决这个特殊的故障。我没有看到^M
插入的位置,或者如何从最后一列中删除它。
我的代码
如果我剥离,这条线工作正常 ^M
filename="$(echo "$line" | awk '{if ($3 ~ /^M$/) {sub(/^M$/,"", $3)} printf $3; printf ""}')"
Run Code Online (Sandbox Code Playgroud)
此行失败:
text="$(echo "$line" | awk '{for(i=6;i<NF+1;i++) {if ($i ~ /^M$/) {sub(/^M$/,"", $i)} } printf "%s ", $i; printf ""}')"
Run Code Online (Sandbox Code Playgroud)
简化版失败了:
text="$(echo "$line" | awk '{for(i=6;i<NF+1;i++) sub(/^M$/,"", $i) printf "%s ", $i; printf ""}')"
Run Code Online (Sandbox Code Playgroud)
在vim
/vi
^M
中ctrl-V + <return …