Problem
Given a text file file.txt, transpose its content.
You may assume that each row has the same number of columns and each field is separated by the ’ ’ character.
For example, if file.txt has the following content:
name age
alice 21
ryan 30
Output the following:
name alice ryan
age 21 30
NOT Solution (exceeding memory limitation)
# Read from the file file.txt and print its transposed content to stdout.
cnt=$(sed '1q' file.txt | awk '{print NF}')
#or use `cnt=$(head -n1 file.txt | ...)` here.
for ((i=1;i<=$cnt;i=i+1))
do
echo $(cut -d ' ' -f $i file.txt)
done
According to above solution(exceeding memory limitation), we know that we cannot read the whole file in a time, we should read it and process it word by word, line by line.
solution(just like C)
awk '
{
for (i = 1; i <= NF; i++) {
if(NR == 1) {
s[i] = $i;
} else {
s[i] = s[i] " " $i;
}
}
}
END {
for (i = 1; s[i] != ""; i++) {
print s[i];
}
}' file.txt
本文介绍了一种处理文本文件的方法,即将文件的内容进行转置。针对每一行拥有相同数量的列的情况,提供了两种解决方案:一种是超出内存限制的简单实现;另一种是逐行读取和处理的高效方法。
682

被折叠的 条评论
为什么被折叠?



