How to Use the Command 'tac' (with examples)
The tac
command is a utility in Unix-like operating systems. It is used to display and concatenate files in reverse order, presenting the last line first and the first line last. While its more common sibling, cat
, displays the contents of a file in standard line order, tac
flips that order entirely. This command can be particularly useful for inspecting logs or files where the most recent information is more pertinent, and you want to access it quickly without scrolling backward.
Concatenate Specific Files in Reversed Order
Code:
tac path/to/file1 path/to/file2 ...
Motivation:
Imagine you are managing multiple log files, where each entry is appended at the end of the file. Typically, you are interested in the most recent events. By using the tac
command, you can quickly view the latest entries from these files in reverse order, thus speeding up the troubleshooting process or simply getting the latest status update efficiently.
Explanation:
tac
: This invokes the command for reversing the order of lines.path/to/file1 path/to/file2 ...
: These are the paths to the files that you want to concatenate in reverse. By specifying multiple file paths,tac
will reverse the lines within each file and also present the files themselves in reverse order.
Example Output:
Assuming file1
contains:
line 1
line 2
line 3
And file2
contains:
line A
line B
line C
The command tac file1 file2
will output:
line C
line B
line A
line 3
line 2
line 1
Display stdin
in Reversed Order
Code:
cat path/to/file | tac
Motivation:
When working interactively in a terminal, you may need to quickly reverse the contents of a command output. For example, while retrieving output from another command that prints the results line by line, you might want to see these from last to first. Piping through tac
will serve the purpose instantly.
Explanation:
cat path/to/file
: This reads the file and outputs its content tostdout
.|
: This pipe symbol takes the output from the command on its left and feeds it as input to the command on its right.tac
: Here, it takes thestdin
provided by the precedingcat
command and reverses the order of lines.
Example Output:
Assuming file
contains:
first line
second line
third line
The combined command will output:
third line
second line
first line
Use a Specific Separator
Code:
tac -s separator path/to/file1 path/to/file2 ...
Motivation:
There might be situations where you want to reverse the order of sections within files that are separated by specific delimiters rather than lines. Maybe you are dealing with records or data entries separated by custom symbols or specific strings that are meaningful in your data processing context.
Explanation:
tac
: Initiates the reverse order processing.-s separator
: This option allows you to specify a custom separator instead of the default newline.tac
will treat each instance of this separator as the boundary for reversal.path/to/file1 path/to/file2 ...
: Paths to files to be processed with the specified separator.
Example Output:
Assuming file
contains:
entry_one|entry_two|entry_three
Command with separator |
:
tac -s "|" file
Output:
entry_three|entry_two|entry_one
Use a Specific Regex as a Separator
Code:
tac -r -s separator path/to/file1 path/to/file2 ...
Motivation:
When separators in your data are not uniform or are complex, the need arises to use a regular expression for matching these separators. This flexibility lets you manipulate and reverse data structured with varied delimiters using patterns recognized by regular expressions.
Explanation:
tac
: Command to reverse input data.-r
: This enables the interpretation of the separator as a regular expression.-s separator
: Specifies the custom regex separator.path/to/file1 path/to/file2 ...
: Paths to target files to be processed.
Example Output:
Given a file with contents:
chapter1\n\nchapter2\n\nchapter3
Command with regex separator:
tac -r -s '\n\n' file
Output:
chapter3
chapter2
chapter1
Use a Separator Before Each File
Code:
tac -b path/to/file1 path/to/file2 ...
Motivation:
When concatenating multiple files in reverse order, you might want to emphasize the start of a new file’s content in the output. Using a separator before each file in the reversed output helps to keep the transition clear and distinguishable for better readability or data processing.
Explanation:
tac
: Initiates line reversal.-b
: This option sets the file separator placement before each file starts, aiding in identifying file boundaries in concatenated output.path/to/file1 path/to/file2 ...
: Paths to files for processed output with separators.
Example Output:
Assume file1
contains:
line_1a
line_1b
And file2
contains:
line_2a
line_2b
Executing:
tac -b file1 file2
Outputs:
line_2b
line_2a
--
line_1b
line_1a
Note: Typically, a default visual separator is used, such as --
.
Conclusion:
The tac
command, though less frequently used than its counterpart cat
, provides a valuable tool for situations requiring reversed line processing. Whether you need the latest log entries or efficiently parse data delimited by complex patterns, tac
provides flexible options to suit your needs. From simple file reading to complex data manipulation with separators and regex, understanding these use cases can greatly enhance how you interact with file contents in various contexts.