[LeetCode] 194. Transpose File

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.

Example:

If file.txt has the following content:

1
2
3
name age
alice 21
ryan 30

Output the following:

1
2
name alice ryan
age 21 30

Explanation

  1. We can use awk to solve this problem. In awk, NF means the number of column and starts from 1. NR means the number of row and also starts from 1.

  2. In the above example, NF is counting like 1, 2, 1, 2, 1, 2 since we have three rows and two columns in each row.

  3. In iteration, if it’s the first row, then we create a new array element s[i] = $i; else, we append $i to s[i].

Solution

1
2
3
4
5
6
7
8
9
10
11
# Read from the file file.txt and print its transposed content to stdout.
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