我有一个带管道分隔字段的文件。 例如
1,2,3|xyz|abc
我需要以下格式输出:
1|xyz|abc
2|xyz|abc
3|xyz|abc
我在bash中有一个工作代码:
while read i
do
f1=`echo $i | cut -d'|' -f1`
f2=`echo $i | cut -d'|' -f2-`
echo $f1 | tr ',' '\n' | sed "s:$:|$f2:" >> output.txt
done < pipe_delimited_file.txt
任何人都可以建议使用循环实现此功能的方法。 该文件包含大量记录。
答案 0 :(得分:4)
使用循环,但它在awk里面,所以非常快:
@objc func theDatePickerValueChanged(sender: UIDatePicker) {
let formatter = DateFormatter()
formatter.dateStyle = .medium
formatter.timeStyle = .medium
dateTimeTextfield.text = formatter.string(from: sender.date)
}
答案 1 :(得分:0)
Perl可能比awk快一点:
perl -F'[|]' -ane 'for $n (split /,/, $F[0]) {$F[0] = $n; print join "|", @F}' file
bash非常慢,但这是一种更快捷的使用方法。这使用普通bash而不调用任何外部程序:
( # in a subshell:
IFS=, # use comma as field separator
set -f # turn off filename generation
while IFS='|' read -r f1 rest; do # temporarily using pipe as field separator,
# read first field and rest of line
for word in $f1; do # iterate over comma-separated words
echo "$word|$rest"
done
done
) < file