如何将多行连接到一行,使用分隔符表示换行符,并避免使用尾随分隔符,并可选择忽略空行?
例.考虑一个文本文件foo.txt,有三行:
foo
bar
baz
Run Code Online (Sandbox Code Playgroud)
所需的输出是:
foo,bar,baz
Run Code Online (Sandbox Code Playgroud)
我现在使用的命令:
tr '\n' ',' <foo.txt |sed 's/,$//g'
Run Code Online (Sandbox Code Playgroud)
理想情况下它会是这样的:
cat foo.txt |join ,
Run Code Online (Sandbox Code Playgroud)
什么是:
当然我可以写一些东西,或者只是使用别名.但我很想知道这些选择.
当我们在git存储库中有很多(比如20个)子模块时,我们可以像这样安装(和更新)它们:
git submodules update --init --recursive
Run Code Online (Sandbox Code Playgroud)
Git尝试在此命令后下载每个子模块(递归).如果我们想让一些子模块可选(如插件)怎么办?
我们怎样才能让git跳过默认下载这些可选子模块,并在我们标记这个子模块时处理为通常的子模块"好的,从现在开始使用"?
假设我有一个字符串
"1,2,3,4"
Run Code Online (Sandbox Code Playgroud)
现在我想用一些不同的值替换,例如字符串的第3个字段.
"1,2,NEW,4"
Run Code Online (Sandbox Code Playgroud)
我设法使用以下命令执行此操作:
echo "1,2,3,4" | awk -F, -v OFS=, '{$3="NEW"; print }'
Run Code Online (Sandbox Code Playgroud)
现在要替换的列的索引应该作为变量传递.所以在这种情况下
index=3
Run Code Online (Sandbox Code Playgroud)
我怎么能把这个传递给awk?因为这不起作用:
echo "1,2,3,4" | awk -F, -v OFS=, '{$index="NEW"; print }'
echo "1,2,3,4" | awk -F, -v OFS=, '{$($index)="NEW"; print }'
echo "1,2,3,4" | awk -F, -v OFS=, '{\$$index="NEW"; print }'
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助!
我有一个包含列表的文件:
line1
line2
line3
.
.
.
Run Code Online (Sandbox Code Playgroud)
我想将所有内容加入 bash 中的字符串中,如下所示:
"line1", "line2", "line3", ...... (no comma at the end)
Run Code Online (Sandbox Code Playgroud)
我怎么做?
编辑:这不是如何使用自定义分隔符将多行文件名连接成一行的重复项?因为我试图在加入时将每个项目都用双引号引起来。
我有一个包含数百万个文件的目录.我刚刚学会了数百万孤儿,我需要取消联系.我想从单个文本文件(理想情况下为csv)中的所有文件数组开始.你能帮我吗?
我打算做一个ls只是将终端输出保存到文件中,但我认为这是一种更优雅的方式.
我怎么能做出ls > log.csv最终看起来像的东西
file1.txt,file2.txt, ... fileN.txt?
我似乎没有找到与此确切问题相匹配的SO问题.
我有一个文本文件,每行有一个文本标记,没有任何逗号,制表符或引号.我想根据文件内容创建一个逗号分隔的字符串.
输入:
one
two
three
Run Code Online (Sandbox Code Playgroud)
输出:
one,two,three
Run Code Online (Sandbox Code Playgroud)
我正在使用此命令:
csv_string=$(tr '\n' ',' < file | sed 's/,$//')
Run Code Online (Sandbox Code Playgroud)
有没有更有效的方法来做到这一点?