通过shell脚本重新排列文件内容

时间:2015-12-02 07:14:53

标签: shell

我有以下文本文件

1
2
3
4
5

我希望文件内容采用以下方式

1,2,3,4,5

我该怎么做呢?

我有以下数据文件:

DATE: 2015-11-30
TIME: 13:15:00
              Charge Remaining (mAh): 4828
              Full Charge Capacity (mAh): 5634

我希望按此顺序排列数据 -

Date,Time,'Charge Remaining','Full Charge Capacity'

所以,输出应该是:

2015-11-30,13:15:00,4828,5634

2 个答案:

答案 0 :(得分:1)

tr '\n' ',' < text-file | sed 's/,$//'

用逗号替换所有换行符;用'nothing'替换最终的逗号(实际上是换行符)。

处理更复杂的数据时,您希望每行上的最后一个字段作为CSV样式输出中的字段。使用awk加上之前的脚本很容易:

awk '{ print $NF }' text-file | tr '\n' ',' | sed 's/,$//'

答案 1 :(得分:1)

您可以使用简短的shell脚本来读取数据文件并输出逗号分隔值。如果选择:

,可以将输出重定向到新文件
#!/bin/bash

declare -i cnt=0; 
while read -r line; do 
    [ "$cnt" -eq 0 ] && printf "%s" "${line##*: }" || printf ",%s" "${line##*: }"
    ((cnt++))
done < "$1"

printf "\n"

<强>输入

$ cat dat/charge.txt
DATE: 2015-11-30
TIME: 13:15:00
            Charge Remaining (mAh): 4828
            Full Charge Capacity (mAh): 5634

<强>输出

$  bash rfmtcharge.sh dat/charge.txt
2015-11-30,13:15:00,4828,5634

如果您想在单行脚本中使用它,可以使用:

( declare -i cnt=0; while read -r line; do [ "$cnt" -eq 0 ] && printf "%s" "${line##*: }" || printf ",%s" "${line##*: }"; ((cnt++)); done < dat/charge.txt; printf "\n" )

注意:单行脚本包含在( ... )中,以便在子shell中执行。