Evan’s Unix Tips & Tricks

Collected by Evan Lutkenhoff

Unix Commands for MRI

Command Action
startmricro opens dicom
imagej opens dicom
mricron opens dicom
xmedcon opens dicom
dcm2nii converts dicom to NIFTI
dcm2nii -c N -a N -i Y -r N -x N * converts dicom to NIFTI (puts name, date, and scan-type in name)
dcm2nii -c N * converts dicom to NIFTI and keeps in original directory
dicom2analyze converts dicom to ANALYZE
dicom_hdr view dicom header

FSL BET (Brain Extraction)

bet -c x y z -f 0.4
Opens bet. c flag is center of gravity (x y z coordinates needed). f flag expands the bet-mask (if f<0.5-expands mask, if f>0.5-contracts mask).

Renaming Files

Files: a_1.txt, a_2.txt, a_3.txt…
rename a new_a a*
Renames all files named ‘a’ followed by anything.
Results: new_a_1.txt, new_a_2.txt, new_a_3.txt…

Zip/Unzip Files

tar -cvzf name.tar.gz name
Zips file
tar xvzf name.tar.gz
Unzips file

Differences Between Folders

diff -rq directory1 directory2
Finds differences between two folders.

Commenting Multiple Lines

:<<comment
lines to comment out here
lines to comment out here
lines to comment out here
comment
Comments out multiple lines of code.

Echo (to same line)

echo -n “whatever” >> test.txt
Echo to same line (append) without new line per loop and write out to test.txt.

Removing File Extensions and Paths (only for tcsh)

if var=image.nii.gz, then:
${var:r:r}
Removes .nii.gz extension.
${var:r}
Removes .nii extension.
${var:t}
Removes absolute path preceding file.
`$FSLDIR/bin/remove_ext $var`
Removes file extension for image using FSL (works in all shells).

Add File as Input for Script

sh script.sh test
Uses test as input file for script.sh, input saved as $1.
echo $1
Outputs test to screen.

Text Manipulation Within a File

tr ‘,’ ‘ ‘ test.txt > out.txt <- Put spaces between single quotes
Replace all commas in a file with spaces.
tr ‘\n’ ‘ ‘ < list.txt <- Put spaces between single quotes
Replace all new lines in a file with spaces.
sed ‘/^$/d’ input.txt > output.txt
Remove blank lines from a file and save to another file without overwriting the original.

Directory

du -sh directory
Determine the size of the directory in human-readable format.

Find

find ./temp -type f -name ‘*test*’
Search current directory for a file with name containing word test in directory named temp.
find ./temp -type d -name ‘test’
Search for a directory named test in directory named temp.
find . 2>/dev/null
Suppresses error messages such as ‘Permission denied’.
find . -iname “whichevercase”
Performs a case insensitive search.
find . -name ‘*test*’ -exec cp {} /path \;
Search for files and copy them to a new directory named path.

Does File Exist?

#!/bin/sh
file=$1
if [-f $file];
then echo “File $file exists”
else echo “file $file does not exist”
fi

Passing Variables Between Scripts

Two options:
1) You can make an environment variable before executing the second script. -> export TESTVARIABLE
2) You can source the second script which allows complex variables (e.g. arrays). -> . /absolute/path/script.sh

Cutting Text Within Complex File Names

Example:
#!/bin/sh
for id in MNI152_T1_1mm_brain_mask_evan_A_B_C_3dSkullStrip.nii.gz; do
frontname=`echo $id | awk -F “_evan_” ‘{print $2}’`
name=`echo $frontname | awk -F “_3dSkullStrip.nii.gz” ‘{print $1}’`
echo $name
done
If input is MNI152_T1_1mm_brain_mask_evan_A_B_C_3dSkullStrip.nii.gz, then output is A_B_C.

IF ‘equal to’ Statement

if [$variable == 5.000]; then echo $id;
else echo “something else”;
fi

Rsync over SSH

*on Monti desktop Ubuntu machine
1) Reformat external hard drive to ext4 (if not ext format already)
2) cd /path/to/destination/folder/
*3) rsync -avhc –rsh=ssh username@alf.psych.ucla.edu:/path/to/source/folder/ .

Replace String Using SED

sed -i “s/tobereplaced/replacement/g” test.txt
Replaces first string with second one WITHIN the same file.
sed “s/tobereplaced/replacement/g” input.txt > output.txt
Creates a new file with the second string replacing the first string.

Delete 1st Line of file Using SED

sed -i 1d file.csv

Complex String Manipulation

Example: old=”test_more_t1_test_t1″ <-We only want to remove the last t1
echo ${old%_*}
output: test_more_t1_test

Removes last part of string after last delimiter.

Replace character within variable (bash)

${id//;/ } replace ; with space in variable id

List Variations

ls -l | grep ‘^d’
Displays all directories.
ls -d */
Displays only directories.
ls -l | grep -v ‘^d’
Displays only files.

GREP Multiple Lines

grep -A1 error
This tells grep to include one line after match.
grep -B1 error
This tells grep to include one line before match.

Adding Comments/”How to use”

Usage() {
echo ” “
echo “your comments”
echo ” “
exit 1
}
[“$1″ = ” “] && Usage
Allows you to add comments or a “How to use” section to a script missing user input.

Exit Shell (if sub-command returns non-zero status)

At beginning of script, add:
set -e

Copy Directory Structure

cp –parents -r dir1 dir2
Copies folder and parent directory structure.

Read a Text File Line-by-Line

while read line; do
echo ${line}
done < testwhileloop.txt

Add a Preceding 0 to Numbers 1-9 in Cell D1 in Excel

TEXT(D1,”00″)

Copy File into Multiple Directories

echo dir1 dir2 dir3 | xargs -n 1 cp file.txt

Copy Folders without Copying Attributes (owner, permissions, …)

cp -r –no-preserve all folder1 folder2

Delete all your SGE (Sun Grid Engine) jobs under your username

sge qdel -u username

Suppress all standard error output from command

command 2>/dev/null

Combine stderr and stdout into the stdout stream for further manipulation:

append to the end of command:

2>&1

Write out stderr and stdout to separate log files (BASH):

append to the end of command:

2>stderr.log 1>stdout.log

Exclude wildcard matches in BASH

shopt -s extglob turns on extended globbing features

GLOBIGNORE=”*ignorethis*”

ls excludes anything saved in GLOBIGNORE

unset GLOBIGNORE unset ignore variable

shopt -u extglob turn off extended globbing features

Have Script Send Email Upon Completion

cat /path/to/file | mail -s “your subject” your@email.com

Where ‘path/to/file’ leads to the file where the body of your email will be stored.

Merge PDFs (or other imagetypes) and maintain quality

convert -density 150 input1.pdf input2.pdf output.pdf

*use density=150 for PDFs