将逗号替换为冒号并将所有值移至一行

将逗号替换为冒号并将所有值移至一行

我在 Calc 中输入了一个数字列表并将其保存为 CSV,以便一行上的所有值都用逗号分隔。我将在以下示例中描述我使用 bash 寻找的内容:

输入

22,33
45,533

输出

22:33,45:533

答案1

不确定我是否理解正确,但对于您显示的输入和输出,以下sed命令可以进行转换,同时考虑到您的输入文件包含 CR-LF 行终止符:

sed 's/,/:/g;s/ /,/g' <<<$(tr -d '\r' <input_file) | tee output_file.tmp
mv output_file.tmp input_file

答案2

无需外部二进制文件的解决方案 - 但速度较慢(逐行读取并更改'' → '')

while read -u 3 -r line; do 
        echo -n "${line/,/:}," >> new_file
done 3< old_file

答案3

效率低下,但肯定有效:

在 gedit 中打开文件。按Ctrl+ H。在查找中输入,,在替换中输入:。然后选择全部替换。

接下来,再次打开“查找和替换”屏幕。在“查找”框中键入内容,\n并将“替换”框留空。然后选择“全部替换”。

就是这样 :)

答案4

这有效:

cat test| sed s/,/:/g | sed s/$/,/g | xargs

但产生:

22:33, 45:533,

因此,您可能必须使用这个更长的版本才能获得您要求的精确结果:

cat test| sed s/,/:/g | sed s/$/,/g | xargs | sed "s/, /,/g"

我很确定使用 sed/awk 有更好的方法可以做到这一点,尽管这确实实现了您的要求并且非常容易阅读。

相关内容